home *** CD-ROM | disk | FTP | other *** search
Java Source | 2000-09-28 | 5.8 KB | 166 lines |
- /*
- * QuickTime for Java SDK Sample Code
-
- Usage subject to restrictions in SDK License Agreement
- * Copyright: © 1996-1999 Apple Computer, Inc.
-
- */
- import java.awt.*;
- import java.awt.event.*;
- import java.io.*;
-
- import quicktime.qd.*;
- import quicktime.*;
- import quicktime.io.*;
- import quicktime.std.*;
- import quicktime.std.movies.*;
- import quicktime.std.image.*;
- import quicktime.app.QTFactory;
- import quicktime.app.display.*;
- import quicktime.app.players.*;
- import quicktime.app.image.*;
- import quicktime.app.actions.*;
- import quicktime.app.anim.*;
-
- public class GroupDrawing extends Frame implements StdQTConstants {
-
- public static void main (String args[]) {
- try {
- QTSession.open();
- GroupDrawing gd = new GroupDrawing("QT in Java");
-
- gd.pack();
- gd.show();
- gd.toFront();
- } catch (Exception e) {
- e.printStackTrace();
- QTSession.close();
- }
- }
-
- GroupDrawing (String title) throws Exception {
- super (title);
-
- QTCanvas myQTCanvas = new QTCanvas(QTCanvas.kAspectResize, 0, 0);
- add("Center", myQTCanvas);
-
- addWindowListener(new WindowAdapter () {
- public void windowClosing (WindowEvent e) {
- QTSession.close();
- dispose();
- }
- public void windowClosed (WindowEvent e) {
- System.exit(0);
- }
- });
-
- // setupGroup
- int kWidth = 300, kHeight = 300;
- Dimension d = new Dimension (kWidth, kHeight);
- DirectGroup drawer = new DirectGroup(d, QDColor.gray);
-
- QTPlayer p1 = makePlayer (new QTFile (QTFactory.findAbsolutePath ("jumps.mov")));
- drawer.addMember (p1, 1, 0.1F, 0.2F);
-
- Compositor shipAnimation = new Compositor (new QDGraphics (new QDRect(200, 200)),
- QDColor.lightGray, 20, 1);
- addSprites (shipAnimation);
- shipAnimation.setLocation (kWidth - 160, kHeight - 160);
- drawer.addMember (shipAnimation, 2);
-
- QTFile imageFile = new QTFile (QTFactory.findAbsolutePath ("pics/house.jpg"));
- GraphicsImporterDrawer if1 = new GraphicsImporterDrawer (imageFile);
- if1.setDisplayBounds (new QDRect (kWidth, kHeight));
- // we use an ImagePresener for this member as the dragging is much quicker
- ImagePresenter ip = ImagePresenter.fromGraphicsImporterDrawer (if1);
- drawer.addMember (ip, 3);
-
- Dragger dragger = new Dragger (MouseResponder.kNoModifiersMask);
- dragger.setConstrained(Dragger.kConstrainNone);
- GroupController controller1 = new GroupController (dragger, false);
- controller1.addMember (p1);
- controller1.addMember (shipAnimation);
- drawer.addController (controller1);
-
- Dragger dragger2 = new Dragger (MouseResponder.kNoModifiersMask);
- GroupController controller2 = new GroupController (dragger2, false);
- controller2.addMember (ip);
- drawer.addController (controller2);
-
- LayerChanger lc = new LayerChanger (InputEvent.ALT_MASK);
- GroupController controller3 = new GroupController (lc, true);
- drawer.addController (controller3);
-
- myQTCanvas.setClient (drawer, true);
-
- shipAnimation.getTimer().setRate(1);
- drawer.getTimer().setRate (1);
- }
-
- // use a file input stream to make dragging faster as the movie is comletetly loaded into memory
- // this is not required for any other reason
- private static QTPlayer makePlayer (QTFile f) throws IOException, QTException {
- QTDrawable d = QTFactory.makeDrawable (new FileInputStream(f), kDataRefFileExtensionTag, "mov");
- Movie m = ((QTPlayer)d).getMovieController().getMovie();
- m.getTimeBase().setFlags (loopTimeBase);
- return (QTPlayer)d;
- }
-
- private static ImagePresenter makeImagePresenter (QTFile file, QDRect size) throws Exception {
- GraphicsImporterDrawer if1 = new GraphicsImporterDrawer (file);
- if1.setDisplayBounds (size);
- return ImagePresenter.fromGraphicsImporterDrawer (if1);
- }
-
- private static void addSprites (Compositor sh) throws IOException, QTException {
- File matchFile = QTFactory.findAbsolutePath ("images/Ship01.pct"); //this file must exist in the directory!!!
- ImageDataSequence isp = ImageUtil.createSequence (matchFile);
- ImageDataSequence seq = ImageUtil.makeTransparent (isp, QDColor.blue);
-
- // Build Sprites
- Matrix matrix1 = new Matrix();
- matrix1.setTx(20);
- matrix1.setTy(20);
- matrix1.setSx(0.8F);
- matrix1.setSy(0.8F);
- TwoDSprite s1 = new TwoDSprite(seq, 4, matrix1, true, 1);
- sh.addMember (s1);
-
- Matrix matrix2 = new Matrix();
- matrix2.setTx(4);
- matrix2.setTy(4);
- TwoDSprite s2 = new TwoDSprite(seq, 1, matrix2, true, 10);
- sh.addMember (s2);
-
- // This needs to be a 32bit QDGraphics so the blend mode will
- // be applied correctly to this sprite
- File shipFile = QTFactory.findAbsolutePath ("images/Ship10.pct");
- GraphicsImporterDrawer ip = new GraphicsImporterDrawer (new QTFile(shipFile));
- QDRect r = new QDRect (ip.getDescription().getWidth(), ip.getDescription().getHeight());
- ImageSpec si = ImageUtil.makeTransparent (ip, QDColor.blue, new QDGraphics (QDGraphics.kDefaultPixelFormat, r));
- Matrix matrix3 = new Matrix();
- matrix3.setTx(50);
- matrix3.setTy(50);
- TwoDSprite s3 = new TwoDSprite(si, matrix3, true, 8, new GraphicsMode (QDConstants.blend, QDColor.green));
- sh.addMember(s3);
-
- // Add Controllers
- // Build ActionList
- SimpleActionList al = new SimpleActionList();
- ImageSequencer is = new ImageSequencer (seq);
- is.setLooping (ImageSequencer.kLoopForwards);
- al.addMember (new NextImageAction (10, 1, is, s1));
- al.addMember (new BounceAction (5, 1, sh, s1, 3, 2));
- ImageSequencer is2 = new ImageSequencer (seq);
- is2.setLooping (ImageSequencer.kLoopForwards);
- al.addMember (new NextImageAction (20, 1, is2, s2));
- al.addMember (new BounceAction (20, 1, sh, s2, 4, 3));
- sh.addController(al);
-
- // Add Dragger
- Dragger dragger = new Dragger (InputEvent.SHIFT_MASK);
- SWController controller = new SWController (dragger, true);
- sh.addController (controller);
- }
- }
-